package adv.np.pViaggianti.view.gwt.client.views;

import static adv.np.pViaggianti.view.gwt.client.localization.LocaleSettings.pViaggianti;
import adv.np.pViaggianti.view.gwt.client.commons.BaseView;
import adv.np.pViaggianti.view.gwt.client.dispatchers.MainDispatcher;
import adv.np.pViaggianti.view.gwt.client.localization.LocaleSettings;

import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.widgets.Button;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;

/**
 * <p>
 * Il Main-Presentation dell'applicazione Partite Viaggianti.
 * </p>
 * <p>
 * Questa deve essere l'interfaccia del pannello centrale dell'applicazione
 * Partite Viaggianti
 * </p>
 * 
 * @author Giovanni Dall'Oglio Risso
 */
public class MainView extends BaseView {

	private MainDispatcher myController;

	public MainView(MainDispatcher controller) {
		myController = controller;
	}
	

	/**
	 * Il pannello in cui verranno disegnate le altre interfacce (delle altre
	 * conversazioni).
	 */
	private Panel rightPanel = new SimplePanel();
	

	@Override
	public VisualizationMode getVisualizationMode() {
		return VisualizationMode.FULLSCREEN;
	}

	@Override
	public Widget createWidget() {

		HLayout horizontalCentralPanel = new HLayout();
		horizontalCentralPanel.setResizeBarSize(5);
		horizontalCentralPanel.setLayoutMargin(15);
		horizontalCentralPanel.setWidth("100%");
		horizontalCentralPanel.setHeight("*");
		

        final SectionStack menuSectionStack = new SectionStack();  
        menuSectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);  
        menuSectionStack.setWidth("20%");  
        //menuSectionStack.setBorder("2px solid #458B00");  
  
        SectionStackSection sezInserimento = new SectionStackSection(pViaggianti.txtM_inserimento());  
        sezInserimento.setExpanded(true);  
        menuSectionStack.addSection(sezInserimento);  
  
        SectionStackSection sezConsultazione = new SectionStackSection(pViaggianti.txtM_consultazione());  
        sezConsultazione.setExpanded(true);  
        menuSectionStack.addSection(sezConsultazione);  

        SectionStackSection sezRettifiche = new SectionStackSection(pViaggianti.txtM_rettifiche());  
        sezRettifiche.setExpanded(true);  
        menuSectionStack.addSection(sezRettifiche);
        
        SectionStackSection sezGestione = new SectionStackSection(pViaggianti.txtM_gestione());  
        sezGestione.setExpanded(true);  
        menuSectionStack.addSection(sezGestione);
		
		
		
        

        addMenuOption(
        		sezInserimento,
        		pViaggianti.c01_InsMultIniz_desc(),
        		pViaggianti.c01_InsMultIniz_code());
        
        addMenuOption(
        		sezInserimento,
        		pViaggianti.c02_InsIniz_desc(),
        		pViaggianti.c02_InsIniz_code());
        
        addMenuOption(
        		sezInserimento,
        		pViaggianti.c03_InsConf_desc(),
        		pViaggianti.c03_InsConf_code());
        
        addMenuOption(
        		sezInserimento,
        		pViaggianti.c04_InsConfAnt_desc(),
        		pViaggianti.c04_InsConfAnt_code());
        
        addMenuOption(
        		sezInserimento,
        		pViaggianti.c13_InsConfInclEnte_desc(),
        		pViaggianti.c13_InsConfInclEnte_code());
        
        addMenuOption(
        		sezInserimento,
        		pViaggianti.c14_InsConfInclCaus_desc(),
        		pViaggianti.c14_InsConfInclCaus_code());
        
        addMenuOption(
        		sezInserimento,
        		pViaggianti.c15_InsConfEsclEnte_desc(),
        		pViaggianti.c15_InsConfEsclEnte_code());
        

        addMenuOption(
        		sezInserimento,
        		pViaggianti.c16_InsConfEsclCaus_desc(),
        		pViaggianti.c16_InsConfEsclCaus_code());
        

        addMenuOption(
        		sezConsultazione,
        		pViaggianti.c05_ConsPartViagg_desc(),
        		pViaggianti.c05_ConsPartViagg_code());
        
        addMenuOption(
        		sezConsultazione,
        		pViaggianti.c06_ConsPartViaggEnte_desc(),
        		pViaggianti.c06_ConsPartViaggEnte_code());

        addMenuOption(
        		sezConsultazione,
        		pViaggianti.c07_ConsPartViaggCaus_desc(),
        		pViaggianti.c07_ConsPartViaggCaus_code());

        addMenuOption(
        		sezConsultazione,
        		pViaggianti.c30_ConsIniz_desc(),
        		pViaggianti.c30_ConsIniz_code());

        addMenuOption(
        		sezConsultazione,
        		pViaggianti.c08_TotMovimentaz_desc(),
        		pViaggianti.c08_TotMovimentaz_code());

        addMenuOption(
        		sezConsultazione,
        		pViaggianti.c09_StampaMovViaggianti_desc(),
        		pViaggianti.c09_StampaMovViaggianti_code());
        
        
        addMenuOption(sezRettifiche,
        		pViaggianti.c10_RettIniziative_desc(),
        		pViaggianti.c10_RettIniziative_code());
        
        addMenuOption(sezRettifiche,
        		pViaggianti.c11_RettConferme_desc(),
        		pViaggianti.c11_RettConferme_code());
        
        addMenuOption(sezRettifiche,
        		pViaggianti.c12_RettConfermeAntic_desc(),
        		pViaggianti.c12_RettConfermeAntic_code());
        
        addMenuOption(sezRettifiche,
        		pViaggianti.c17_AnnMultViagg_desc(),
        		pViaggianti.c17_AnnMultViagg_code());
        

        
        addMenuOption(sezGestione,
        		pViaggianti.c18_GestAnagCausali_desc(),
        		pViaggianti.c18_GestAnagCausali_code());
        
        addMenuOption(sezGestione,
        		pViaggianti.c19_GestAbilitEntCaus_desc(),
        		pViaggianti.c19_GestAbilitEntCaus_code());
        
		
		
		
		
		
		
		
		
		
		

        horizontalCentralPanel.addMember(menuSectionStack);
        horizontalCentralPanel.addMember(rightPanel);
        
        

		SectionStack sectionStack = new SectionStack();
		// sectionStack.setBorder("2px dotted blue");
		sectionStack.setWidth("100%");
		sectionStack.setHeight("100%");
		sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);
		sectionStack.setOverflow(Overflow.HIDDEN);

		SectionStackSection loggingInfoPanel = new SectionStackSection();
		loggingInfoPanel.setTitle(LocaleSettings.commonMessages.txtUserInfoPanel());
		loggingInfoPanel.setExpanded(true);
		loggingInfoPanel.setCanCollapse(false);
		
		loggingInfoPanel.setItems(LoggedUserPanel.getUserInfoPanel());

		SectionStackSection centralPanel = new SectionStackSection();
		centralPanel.setTitle(LocaleSettings.pViaggianti.txtMenu());
		centralPanel.setExpanded(true);
		centralPanel.setCanCollapse(false);
		centralPanel.setItems(horizontalCentralPanel);

		SectionStackSection infoPanel = new SectionStackSection();
		infoPanel.setTitle(LocaleSettings.commonMessages.txtInfoPanel());
		infoPanel.setExpanded(true);
		infoPanel.setCanCollapse(true);
		infoPanel.setItems(InfoPanel.getInfoPanel());
		
		sectionStack.setSections(loggingInfoPanel, centralPanel, infoPanel);

		return sectionStack;
	}

	public void setRightPanel(Panel rightPanel) {
		this.rightPanel = rightPanel;
	}

	public Panel getRightPanel() {
		return rightPanel;
	}
	

	/**
	 * Per aggiungere un'opzione al menu a sinistra
	 * @param sezione la sezione in cui aggiungere la voce di Menu
	 * @param description La descrizione da visualizzare
	 * @param operationCode Il codice dell'operazione
	 */
	private void addMenuOption(
			SectionStackSection sezione,
			String description,
			final String operationCode) {
		
	    Button btn = new Button(operationCode + " - " + description);
	    btn.setAlign(Alignment.LEFT);
	    btn.setHeight(25);
	    btn.setWidth(200);
	    
	    btn.addClickHandler(new ClickHandler() {
	    	public void onClick(ClickEvent event) {
	    		myController.menuSelected(operationCode);
	    	}
	    });
	    
	    sezione.addItem(btn);
	}

}
